package br.com.sisgerenciamento.model.produto;

import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.sisgerenciamento.dto.produto.ProdutoDTO;
import br.com.sisgerenciamento.model.unidade.UnidadeProdutoVO;
import br.com.sisgerenciamento.model.usuario.UsuarioVO;
import br.com.sisgerenciamento.utilidades.TreatDate;
import br.com.sisgerenciamento.utilidades.TreatNumber;
import br.com.sisgerenciamento.utilidades.Validator;

@Entity
@Table(name = "PRODUTO")
public class ProdutoVO {
	
	@Id
	@GeneratedValue
	private Long codigo;
	
	@Temporal(TemporalType.DATE)
	private Date dataCadastro;
	
	private Boolean status;
	
	@Column(length = 150)
	private String descricao;
	
	@OneToOne(fetch = FetchType.EAGER)
	private UnidadeProdutoVO unidade;
	
	private BigDecimal valorVarejo1;
	
	private BigDecimal valorVarejo2;
	
	@Enumerated(EnumType.ORDINAL)
	private TipoProdutoEnum tipo;
	
	@ManyToOne(fetch =  FetchType.EAGER)
	@JoinColumn(name = "usuario")
	private UsuarioVO usuario;
	
	private Integer quantidade;
	
	public ProdutoDTO getDTO() throws ParseException{
		ProdutoDTO dto = new ProdutoDTO();
		
		Validator validator = Validator.novo();
		dto.setCodigo(!validator.isNullOrZero(getCodigo()) ? getCodigo().toString() : null );
		dto.setDataCadastro(TreatDate.formatDefaultDate(getDataCadastro()));
		dto.setStatus((getStatus()==true?"1":"0"));
		dto.setDescricao(getDescricao());
		dto.setUnidade(getUnidade().getDTO());
		dto.setValorVarejo1(TreatNumber.convertMonetario(getValorVarejo1()));
		dto.setValorVarejo2(TreatNumber.convertMonetario(getValorVarejo2()));
		dto.setTipo(getTipo().getValor().toString());
		dto.setUsuario(getUsuario().getDTO());
		dto.setQuantidade(getQuantidade()!=null?getQuantidade().toString():null);
		return dto;
	}

	public Long getCodigo() {
		return codigo;
	}
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	public Date getDataCadastro() {
		return dataCadastro;
	}
	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}
	public Boolean getStatus() {
		return status;
	}
	public void setStatus(Boolean status) {
		this.status = status;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public UnidadeProdutoVO getUnidade() {
		return unidade;
	}
	public void setUnidade(UnidadeProdutoVO unidade) {
		this.unidade = unidade;
	}
	public BigDecimal getValorVarejo1() {
		return valorVarejo1;
	}
	public void setValorVarejo1(BigDecimal valorVarejo1) {
		this.valorVarejo1 = valorVarejo1;
	}
	public BigDecimal getValorVarejo2() {
		return valorVarejo2;
	}
	public void setValorVarejo2(BigDecimal valorVarejo2) {
		this.valorVarejo2 = valorVarejo2;
	}
	public TipoProdutoEnum getTipo() {
		return tipo;
	}
	public void setTipo(TipoProdutoEnum tipo) {
		this.tipo = tipo;
	}
	public Integer getQuantidade() {
		return quantidade;
	}
	public void setQuantidade(Integer quantidade) {
		this.quantidade = quantidade;
	}
	public UsuarioVO getUsuario() {
		return usuario;
	}
	public void setUsuario(UsuarioVO usuario) {
		this.usuario = usuario;
	}
}
